package org.glut.cloud.repairRecordManage.ws;

import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;
import org.springframework.stereotype.Component;

import java.io.IOException;

// @Component 注解将该类标记为 Spring 组件，可以通过依赖注入使用
@Component
public class ChatHandler extends TextWebSocketHandler {

    // WebSocketSessionManager 用于管理所有活跃的 WebSocket 会话
    private final WebSocketSessionManager webSocketSessionManager;

    // 构造函数，通过依赖注入 WebSocketSessionManager
    public ChatHandler(WebSocketSessionManager webSocketSessionManager) {
        this.webSocketSessionManager = webSocketSessionManager;
    }

    // 当新连接建立时调用
    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        // 将新连接的会话添加到管理器中
        webSocketSessionManager.addSession(session);
    }

    // 当连接关闭时调用
    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
        // 从管理器中移除关闭的会话
        webSocketSessionManager.removeSession(session);
    }

    // 当收到文本消息时调用
    @Override
    protected void handleTextMessage(WebSocketSession session, TextMessage message) throws IOException {
        // 遍历所有活跃的 WebSocket 会话
        for (WebSocketSession s : webSocketSessionManager.getSessions()) {
            // 确保会话是打开的且不是发送消息的原会话
            if (s.isOpen() && !s.equals(session)) {
                // 将收到的消息转发给其他会话
                s.sendMessage(message);
            }
        }
    }
}
